<?php

namespace App\Containers\AppSection\Project\Models;

use App\Containers\AppSection\Type\Models\Type;
use App\Ship\Parents\Models\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * Условие проекта
 *
 * @property int $id Id
 * @property string $type_key Цель привлечения инвестиций
 * @property string $own_version Свой вариант
 * @property int $min Минимальная сумма
 * @property int $target Целевая сумма
 * @property int $percent Ставка
 * @property int $loan Срок займа
 * @property int $period Период сбора инвестиций
 * @property string $rating_key Рейтинг
 * @property string $repayment_key Тип погашения
 * @property int $deffer_period Срок отсрочки
 * @property int $penalty_per_day Размер пени в день
 * @property bool $charge_penalty_first_day Начало начисления пени
 * @property int $percents_calculation Расчет % за пользование займом при просрочке
 * @property string $output_key Тип вывода
 *
 * @property Type $type Цель привлечения инвестиций
 * @property Type $rating Рейтинг
 * @property Type $repayment Тип погашения
 * @property Type $output Тип вывода
 */
class Condition extends Model
{
    public $timestamps = false;
    protected $table = 'project_conditions';
    protected $fillable = [
        'type_key',
        'own_version',
        'min',
        'target',
        'percent',
        'loan',
        'period',
        'rating_key',
        'repayment_key',
        'deffer_period',
        'penalty_per_day',
        'charge_penalty_first_day',
        'percents_calculation',
        'output_key',
    ];

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'Condition';

    /**
     * Цель привлечения инвестиций
     * @return BelongsTo Type
     */
    public function type(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'type_key', 'key');
    }

    /**
     * Рейтинг
     * @return BelongsTo Type
     */
    public function rating(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'rating_key', 'key');
    }

    /**
     * Тип погашения
     * @return BelongsTo Type
     */
    public function repayment(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'repayment_key', 'key');
    }

    /**
     * Тип вывода
     * @return BelongsTo Type
     */
    public function output(): BelongsTo
    {
        return $this->belongsTo(Type::class, 'output_key', 'key');
    }

    /**
     * @param $repaymentKey
     * @return bool
     */
    public function hasRepayment($repaymentKey): bool
    {
        return $this->repayment_key === $repaymentKey;
    }
}
